package servicios;

import java.util.Hashtable;

import javax.ejb.Stateless;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.InitialContext;



@Stateless
public class AdmJMSBean implements AdmJMS {

	@Override
	public void enviarPedidoMateriaPrima(String xml) {
		Hashtable<String,String> props = new Hashtable<String,String>();
        props.put(InitialContext.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
        props.put(InitialContext.PROVIDER_URL, "jnp://localhost:1099");
        QueueConnection qCon = null;
        QueueSession qSession = null;
        QueueSender qSender = null;
        try {
                InitialContext ctx = new InitialContext(props);

                // buscar la Connection Factory en JNDI
                QueueConnectionFactory qfactory = (QueueConnectionFactory) ctx.lookup("ConnectionFactory");

                // buscar la Cola en JNDI
                Queue queue = (Queue) ctx.lookup("queue/pedidosMateriaPrimaQueue");

                // crear la connection y la session a partir de la connection
                qCon = qfactory.createQueueConnection();
                qSession = qCon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);

                // crear un producer para enviar mensajes usando la session
                qSender = qSession.createSender(queue);
                
                // crear un mensaje de tipo text y setearle el contenido
                TextMessage message = qSession.createTextMessage();
                message.setText(xml);

                // enviar el mensaje
                qSender.send(message);
                
        } catch (Exception e) {
                System.out.println("Error al efectuar pedido: " + e);
        } finally {
            cerrarSeguro(qCon, qSession, qSender);
    }
	}

	@Override
	public void enviarConfirmacionACC(String xml)  {
		Hashtable<String,String> props = new Hashtable<String,String>();
        props.put(InitialContext.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
        props.put(InitialContext.PROVIDER_URL, "jnp://localhost:1099");
        QueueConnection qCon = null;
        QueueSession qSession = null;
        QueueSender qSender = null;
        try {
                InitialContext ctx = new InitialContext(props);

                // buscar la Connection Factory en JNDI
                QueueConnectionFactory qfactory = (QueueConnectionFactory) ctx.lookup("ConnectionFactory");

                // buscar la Cola en JNDI
                Queue queue = (Queue) ctx.lookup("queue/ordenCompraQueue");

                // crear la connection y la session a partir de la connection
                qCon = qfactory.createQueueConnection();
                qSession = qCon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);

                // crear un producer para enviar mensajes usando la session
                qSender = qSession.createSender(queue);
                
                // crear un mensaje de tipo text y setearle el contenido
                TextMessage message = qSession.createTextMessage();
                message.setText(xml);

                // enviar el mensaje
                qSender.send(message);
                
        } catch (Exception e) {
                System.out.println("Error al efectuar pedido: " + e);
        } finally {
            cerrarSeguro(qCon, qSession, qSender);
    }
	}

	private void cerrarSeguro(QueueConnection conn, QueueSession session,
            QueueSender send) {
    try { send.close(); } catch (Throwable e) {}
    try { conn.stop();} catch (Throwable e) {}
    try { session.close();} catch (Throwable e) {}
}

}